iT邦幫忙

0

30天Leetcode挑戰(12):1535 find the last winner

  • 分享至 

  • xImage
  •  

碎碎念

好幾天沒寫文了,但其實每天都有上去看題(例如昨天的螞蟻相撞),也都有在跟朋友討論。
這幾天有很多可以用外鄉人作法來處理的題目,感覺是蠻有趣的。

題幹

給一個長度的array,裡面有各種數字,要取前兩個比大小,贏的人留下來,輸的丟到數組的最後面,返回先贏了k次的數字

解題思路

這題雖然是中等,但感覺其實沒有那麼難。也許是因為這幾天都是抖機靈的題目,我直接就開始想要怎麼跳過那些數組替換的步驟。

於是我就在想,如果輸了一次,就代表他不可能贏,所以我只需要跑過一整個數組,看誰會在前面贏到指定次數。也就是說,除了第一個數之外,後面的都是去檢查後面k-1個數是否比他大。

class Solution:
    def getWinner(self, arr: List[int], k: int) -> int:
        current_winner = arr[0]
        win_count = 0

        for i in range(1, len(arr)):
            if arr[i] > current_winner:
                current_winner = arr[i]
                win_count = 1
            else:
                win_count += 1

            if win_count == k:
                return current_winner
            
            # 如果我们已经比较了足够多的次数,超过了数组长度,那么当前的最大元素是无敌的
            if i - win_count > len(arr):
                break

        return current_winner

我根本不管把數字刪除跟丟到後面的部分,直接開始比。反正win-count都是從一開始,就直接看什麼時候新數字可以到目標k這樣。


圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言